package com.rem.cloudalibaba.controller;

import org.springframework.web.bind.annotation.*;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/**
 * @author Rem
 * @date 2021-09-22
 */

@RestController
@RequestMapping("/product")
public class GatewayTestController {

    /**
     * 无参数get请求
     *
     * @return
     */
    @GetMapping("/getNoArgs")
    public String getNoArgs() {
//        if(new Random().nextInt(1000) % 3 == 0){
//            throw new RuntimeException();
//        }
//        try {
//            Thread.sleep(2000);
//        } catch (InterruptedException e) {
//            e.printStackTrace();
//        }
        return "getNoArgs";
    }

    /**
     * get请求，有参数
     *
     * @param name
     * @param age
     * @param my
     * @return
     */
    @GetMapping("/getArgs")
    public String getArgs(String name, int age, @RequestHeader("my") String my) {
        return "7001 return - getArgs:name=" + name + ";age=" + age + ";header my = " + my;
    }


    /**
     * post请求，无参数
     *
     * @return
     */
    @PostMapping("/postNoArgs")
    public String postNoArgs() {
        return "postNoArgs";
    }


    /**
     * post请求，有参数
     *
     * @param name
     * @param age
     * @return
     */
    @PostMapping("/postArgs")
    public String postArgs(String name, int age) {
        return "postArgs:name=" + name + ";age=" + age;
    }

    /**
     * post请求，请求体传递参数。
     *
     * @param args
     * @return
     */
    @PostMapping("/postBodyArgs")
    public String postBodyArgs(@RequestBody Map<String, Object> args) {
        return "postBodyArgs:" + args;
    }


    /**
     * 批处理逻辑。根据参数，批量查询数据
     *
     * @param ids
     * @return
     */
    @PostMapping("/batch")
    public List<String> batchMethod(@RequestBody List<Integer> ids) {
        List<String> result = new ArrayList<>();
        for (Integer id : ids) {
            result.add("id=" + id + ";name=名字" + id);
        }
        return result;
    }

    /**
     * 返回结果为集合的服务
     *
     * @param custom
     * @param newHeader
     * @return
     */
    @RequestMapping("/returnList")
    public List<String> returnList(@RequestHeader("custom") String custom, @RequestHeader("newHeader") String newHeader) {
        System.out.println("custom = " + custom + " ; newHeader = " + newHeader);
        List<String> rtnValues = new ArrayList<>();
        rtnValues.add("返回值1");
        rtnValues.add("返回值2");
        rtnValues.add("返回值3");
        return rtnValues;
    }

    /**
     * RESTFul参数
     *
     * @param name
     * @param age
     * @return
     */
    @RequestMapping("/testRestParams/{name}/{age}")
    public String restParams(@PathVariable("name") String name, @PathVariable("age") int age) {
        return "restParams:name=" + name + ";age=" + age;
    }


}
